![AWS SDKを利用して既存のタスク定義にコンテナを追加する](https://devio2023-media.developers.io/wp-content/uploads/2019/05/aws-tools-and-sdks.png)
AWS SDKを利用して既存のタスク定義にコンテナを追加する
もこ@札幌オフィスです。一瞬で夏が過ぎて、もう札幌は最低気温11℃くらいになってしまっています。
さて、今回は既存のタスク定義に追加でコンテナを追加するLambda関数を作成してみました。
コード
今回はFargateで動いている既存のタスク定義にX-Rayのコンテナを導入してみます。
X-Rayではポート2000を利用する動作をするため、ポートマッピングで設定してあげる必要があります。
今回はFargateを利用しているためhostPortを2000と設定していますが、Fargateを使わない場合はhostPort部分を0に書き換える必要があるかもしれません。
const AWS = require("aws-sdk"); const ECS = new AWS.ECS({ region: "ap-northeast-1" }); const daemon = { name: "xray-daemon", image: "amazon/aws-xray-daemon", cpu: 32, memoryReservation: 256, portMappings: [ { hostPort: 2000, containerPort: 2000, protocol: "tcp", }, ], logConfiguration: { logDriver: "awslogs", secretOptions: [], options: { "awslogs-group": "/ecs/logs/sample-fargate-xray-group", "awslogs-region": "ap-northeast-1", "awslogs-stream-prefix": "sample-fargate-xray", }, }, environment: [ { name: "AWS_XRAY_DAEMON_ADDRESS", value: "", }, ], }; exports.handler = async (event) => { const list = [ "ここに追加したいTaskDefinitionの名前を入れます", "複数のTaskDefinitionにも対応しています", ]; for (const service of list) { const taskDefinition = ( await ECS.describeTaskDefinition({ taskDefinition: service }).promise() ).taskDefinition; // registerTaskDefinitionに使えるように整形 delete taskDefinition.taskDefinitionArn; delete taskDefinition.revision; delete taskDefinition.status; delete taskDefinition.requiresAttributes; delete taskDefinition.compatibilities; // xray daemon注入 const xray = daemon; xray.logConfiguration.options[ "awslogs-group" ] = `/ecs/logs/${service}-xray-group`; xray.logConfiguration.options["awslogs-stream-prefix"] = `${service}-xray`; xray.name = `${service}-xray`; // describeTaskDefinitionで取ってきた既存の環境にX Ray DaemonのJSONをPushする taskDefinition.containerDefinitions.push(xray); // タスクを登録 const registerTaskDefinition = await ECS.registerTaskDefinition( taskDefinition ).promise(); console.log(registerTaskDefinition); } };
使い方
aws-sdkを利用する場合、ローカルで実行する方法とLambda上で実行する方法がありますが、aws-sdkをインストールする必要がないLamda上でやっていきます。
Lambda関数を作成し、
そのまま上記コードをコピペします。
Lambda関数にECSの設定を変更するIAM Policyを追加で付与して上げた上で、35行目の const list = []
内に変更したいタスク定義の名前を追加し、適当なテストイベントを作成し、実行します。
ECSのタスク定義を確認し、追加することができれば成功です!
まとめ
「タスク定義にX-Rayをサクッと突っ込みたい」場合などにお使いください!
今回はX-Ray Daemonの追加の場合のサンプルコードでしたが、少し改良すれば他のコンテナを作成することも出来ますので、是非ご活用ください!